package wodegua.d28_特殊文件_日志技术;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 日志技术
 * 可以将系统执行的信息，方便的记录到指定的位置(控制台、文件中、数据库中)
 * 可以随时以开关的形式控制日志的启停，无需侵入到源代码中去进行修改，
 *
 * 日志技术的体系结构
 * 日志框架                     日志接口
 * JUL(java.util.logging)      Commons Logging(JCL)
 * Log4j                        Simple Logging Facade for Java(SLF4J)
 * Logback                      Simple Logging Facade for Java(SLF4J)
 * 其他实现
 *
 * 日志框架:牛人或者第三方公司已经做好的实现代码，后来者直接可以拿去使用
 * 日志接口:设计日志框架的一套标准，日志框架需要实现这些接口，
 * 注意1:因为对Commons Logging接口不满意，有人就搞了SLF4J;因为对Log4j的性能不满意，有人就搞了Logback。
 * 注意2:Logback是基于slf4j的日志规范实现的框架。
 *
 * Logback日志框架官方网站:https://logback.qos.ch/download.html
 * Logback日志框架有以下几个模块:
 * 1.logback-core：基础模块，是其他两个模块依赖的基础(必须有)
 * 2.logback-classic：完整实现了slf4j API的模块(必须有)
 * 3.logback-access：与Tomcat 和Jetty等Servlet容器集成，以提供 HTTP 访问日志的功能(可选，以后再接触)
 *
 * 想使用Logback日志框架，至少需要在项目中整合如下三个模块:
 * 1.slf4j-api:日志接口 https://www.slf4j.org/download.html
 * 2.logback-core
 * 3.logback-classic
 *
 * Logback快速入门
 * 需求
 * 使用Logback日志框架，纪录系统的运行信息。
 * 实现步骤
 * ①:导入Logback框架到项目中去。
 * ②:将Logback框架的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)。
 * ③:创建Logback框架提供的Logger对象，然后用Logger对象调用其提供的方法就可以记录系统的日志信息。
 * ③:创建Logback框架提供的Loqger对象，然后用Loqger对象调用其提供的方法就可以记录系统的日志信息
 * public static final Logger LOGGER= LoggerFactory.getLogger(“类名");
 *
 * 注意:对Logback日志框架的控制，都是通过其核心配置文件logback.xml来实现的
 *
 * 核心配置文件logback.xml
 *
 * 对Logback日志框架进行控制的。
 * 日志的输出位置、输出格式的设置
 *
 * ●通常可以设置2个输出日志的位置:一个是控制台、一个是系统文件中
 * <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 * <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 * 开启日志(ALL)，取消日志(OFF)
 * <root level="ALL">
 * <appender-ref ref="CONSOLE"/>
 * <appender-ref ref="FILE" />
 * </root>
 *
 * 什么是日志级别?
 * 日志级别指的是日志信息的类型，日志都会分级别，常见的日志级别如下(优先级依次升高):
 * 日志级别
 * trace        追踪，指明程序运行轨迹
 * debug        调试，实际应用中一般将其作为最低级别，而 trace 则很少使用
 * info        输出重要的运行信息，数据连接、网络连接、10操作等等，使用较多
 * warn        警告信息，可能会发生问题，使用较多
 * error       错误信息，使用较多
 *
 * 为什么要 学习日志级别?
 * <root level-"info">
 * <appender-ref ref="CONSOLE"/>
 * <appender-ref ref="FILE" />
 * </root>
 * 只有日志的级别是大于或等于核心配置文件配置的日志级别
 */
public class d6_日志技术 {
    public static final Logger LOGGER = LoggerFactory.getLogger("d6_日志技术");

    public static void main(String[] args) {
        try {
            LOGGER.info("准备进入方法了");
            chu(10,0);
            LOGGER.info("方法结束了");
        } catch (Exception e) {
            LOGGER.error("调用方法抛异常了");
            e.printStackTrace();
        }
    }

    private static void chu(int a, int b){
        LOGGER.debug("参数a="+a);
        LOGGER.debug("参数b="+b);
        try {
            LOGGER.info("方法进来了");
            int c = a / b;
            LOGGER.info("方法执行了");
        } catch (Exception e) {
            LOGGER.error("方法报错了");
        }
    }
}
